package com.linys.scala.qf.day12_SQL

import org.apache.spark.sql.{SparkSession, TypedColumn}

/**
  * UDAF强类型
  * 通过继承Aggregator来实现强类型自定义聚合函数，同样是求平均工资
  * ps:在编译阶段就确定了数据类型
  */
object UDAFDemo_DataSet {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName(this.getClass.getName)
      .master("local[2]")
      .getOrCreate()

    import spark.implicits._

    val df = spark.read.json("dir/DataSource/employee.json")
    val salaryDF = df.select("salary")
    val ds = salaryDF.as[Employee]

    // 通过实例化的方式拿到自定义函数
    val avergeSalary: TypedColumn[Employee, Double] =
      new MyAverge2().toColumn.name("avergesalary")

    val res = ds.select(avergeSalary)

    res.show()
  }
}
